/*
 * Програма для обчислення суми чисел 
 * від 0 до N 
 * Для компіляції необхідно виконати команду:
 * gcc sum2.c -fopenmp -o sum2.run
 *
 * Задати кількість потоків 
 * export OMP_NUM_THREADS=4
 *
 * Для виконання необхідно виконати команду:
 * ./sum2.run
 *
 */
#include <stdio.h>
#include <omp.h>
#define N 12
//#define N 100

int main(){
	int a,b=0;
//	omp_set_num_threads(4); // задання кількості потоків (файберів)
	int result=0;
	// початок паралельної ділянки
#pragma omp parallel private(a) shared(b) reduction(+: result) // num_threads(4)
	{
	a = omp_get_thread_num();
	b = omp_get_num_threads();
		int step = N/b;
		int from=a*step;
		int to=from+step;
		int i;
printf("I'm thread: %d my range is from %d to %d with step %d \n",a,from,to,step);
	for(i=from;i<to;i++)
	{
	result+=i;
	}
printf("thread: %d has result %d \n",a,result);
	}
	// кінець паралельної ділянки
printf("All %d threads has result %d \n",b,result);
}
